package tech.waterism.model.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
 * 简化的水利模型输出（扁平化数组结构）
 * 
 * <p>所有时间序列数据都是平行的数组，便于分析和可视化</p>
 * 
 * @author AI Assistant
 * @version 1.0
 * @since 2025-11-10
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ModelOutputSimple {
    
    /**
     * 模型信息
     */
    private String modelName;
    private String modelVersion;
    private String computeTime;
    
    /**
     * 预热期和预报期信息
     */
    private Integer warmUpPeriods;      // 预热期时段数
    private Integer forecastPeriods;    // 预报期时段数
    private String forecastStartTime;   // 起报时间
    
    /**
     * 时间序列数组
     * 
     * <p>每个元素是一个Map，包含：</p>
     * <ul>
     *   <li>time - 时间戳(字符串)</li>
     *   <li>isWarmUp - 是否预热期(布尔值)</li>
     *   <li>rain - 降雨量(mm)</li>
     *   <li>evapotranspiration - 蒸散发(mm)</li>
     *   <li>runoff - 径流深(mm)</li>
     *   <li>discharge - 流量(m³/s)</li>
     *   <li>等等...</li>
     * </ul>
     */
    private List<Map<String, Object>> timeSeries;
    
    /**
     * 状态变量时间序列
     * 
     * <p>每个元素是一个Map，包含每个时段的状态变量值：</p>
     * <ul>
     *   <li>time - 时间戳(字符串)</li>
     *   <li>isWarmUp - 是否预热期(布尔值)</li>
     *   <li>状态变量（如 SA0, UA0, YA0 或 WUP, WLP, WDP, SP, FRP）</li>
     * </ul>
     */
    private List<Map<String, Object>> stateTimeSeries;
    
    /**
     * 模型最终状态
     */
    private Map<String, Object> finalState;
    
    /**
     * 模型参数
     */
    private Map<String, Double> modelParameters;
    
    /**
     * 额外元数据
     */
    private Map<String, Object> metadata;
}

